﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Texfina.Core.Common;
using Texfina.Core.Web;
using Texfina.BOQry.Co;
using Texfina.Entity.Co;
using System.Collections;
using System.Drawing;

namespace CO
{
    public partial class wfFactura : BasePage
    {

        Decimal mtIgv;
        Decimal mtDesc;
        //String mensaje;
        protected void Page_Load(object sender, EventArgs e)
        {
            btnBuscarProv.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_FIND;
            btnGrabar.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_SAVENEW;
            btnSalir.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_EXIT;

            if (!Page.IsPostBack)
            {
                LoadCombos();
                mObetenerDatosPrevios();
                mCargarDatos();
  
            }
        }

       private void LoadCombos()
        { 
                WebHelper.LoadListControl2(dpTipDoc, BDocumento.GetDocumento_Qry01(), "ds_docucom", "id_docucom");
                WebHelper.LoadListControl2(dpProv, BProveedor.Proveedor_qry02(), "ds_raznombre", "id_clipro");
                WebHelper.LoadListControl2(dpNoneda, BTablaGeneral.TablaGeneralFill("016"), "ds_item", "id_item");
                WebHelper.LoadListControl2(dpModalidad, BTablaGeneral.TablaGeneralFill("127"), "ds_item", "id_item");
        }

        protected void btnBuscarProv_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                Session[Constants2.ConstSessionVar.SESION_PROV] = "_SESION_PROV_";
                ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open('wfProvFind.aspx', null, 'height=400,width=750,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

        private void mSalvarDatosGrilla()
        {
            try
            {
                //recorre la cantidad de items, por cada item la entidad oAsigHorario va almacenando , 
                //esto para que data que se va ingresando en la grilla no se pierda

                List<EDetProducto> lstSalvarDatos = new List<EDetProducto>();

                for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
                {
                    // la entidad almacena los items de la grilla 

                    EDetProducto oDetProducto = new EDetProducto();

                    // verificar si los valores ingresados en la grilla estan en label o texbox como tambien en un dropdowlinst

                    oDetProducto._Nu_Correla = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtNumCorrelativo")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtNumCorrelativo")).Text);
                    oDetProducto._Codigo = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text);
                    oDetProducto.Id_vunicons = string.IsNullOrEmpty(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpUM")).SelectedValue) ? string.Empty : Convert.ToString(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpUM")).Text).ToString().Trim();
                    oDetProducto._Producto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text);
                    oDetProducto._Cant = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad")).Text);
                    oDetProducto._Peso_Bruto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text);
                    oDetProducto._PreNeto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text);
                    oDetProducto._PreUnit = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text);
                    oDetProducto._igvActivo = ((CheckBox)GVDetalleProducto.Rows[i].FindControl("chkBxIGV")).Checked;
                    oDetProducto._Igv = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text);
                    oDetProducto._subTotal = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text);                  
                    oDetProducto._Dscto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text);
                    oDetProducto._nu_pordscto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPorDesc")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPorDesc")).Text);
                    oDetProducto._detalle = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDetalle")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDetalle")).Text);

                  //añade los valores de la entidad a la lista de la entidad

                    lstSalvarDatos.Add(oDetProducto);

                }
                // se crea una sesion para almacenar la lista que contiene los  datos.

                Session["SeslstSalvaDatosFac"] = lstSalvarDatos;
            }

            catch (Exception ex)
            {

                ex.ToString();
            }
        }

        //protected void btnNuevo_Click(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        // crea la entidad tipo lista 
        //        //List<AsignacionHorarioEnt> lstAsigHorario = new List<AsignacionHorarioEnt>();
        //        // crea la entidad para obtener los campos que deseamos esten en blanco

        //        //AsignacionHorarioEnt asigHorario = new AsignacionHorarioEnt();

        //        List<EDetProducto> lstProd = new List<EDetProducto>();

        //        EDetProducto prod = new EDetProducto();

        //        // llega a ingresar siempre en cuando ya se tenga un registro en la grilla
        //        string str = Convert.ToString(GVDetalleProducto.Rows.Count + 1);
        //        if (GVDetalleProducto.Rows.Count > 0)
        //        {
        //            //almacena en la entidad la informacion ingresada en la grilla
        //            //salva los datos, hace que cuando se de agregar no se pierda la informacion ya ingresada

        //            mSalvarDatosGrilla();

        //            lstProd = (List<EDetProducto>)(Session["SeslstSalvaDatosFac"]);

        //            //lstAsigHorario = (List<AsignacionHorarioEnt>)(Session["SeslstSalvaDatos"]);
        //            //añade un registro mas en blaco
        //            prod._Nu_Correla = "";
        //            prod._Codigo = "";
        //            prod.Id_vunicons = "";
        //            prod._Producto = "";
                 
        //            prod._Peso_Bruto = Convert.ToDecimal("0.000");
        //            prod._PreNeto = Convert.ToDecimal("0.000");
        //            prod._PreUnit = Convert.ToDecimal("0.000");
        //            prod._Cant = Convert.ToDecimal("0.000");
        //            prod._Igv = Convert.ToDecimal("0.000");
        //            prod._subTotal = Convert.ToDecimal("0.000");
                                    
        //            prod._Dscto = Convert.ToDecimal("0.000");
        //            prod._nu_pordscto = 0;
        //            prod._detalle = "";
        //            // muestra el item en blanco

        //            lstProd.Add(prod);
        //            GVDetalleProducto.DataSource = lstProd;
        //            GVDetalleProducto.DataBind();
        //            Session["lstListadoGrillafac"] = lstProd;
        //            mCalculaTotal();
        //        }
        //        else
        //        {
        //            // Añande el primer item en blando de la grilla
        //            prod._Nu_Correla = "";
        //            prod._Codigo = "";
        //            prod.Id_vunicons = "";
        //            prod._Producto = "";
        //            prod._Peso_Bruto = Convert.ToDecimal("0.000");
        //            prod._PreNeto = Convert.ToDecimal("0.000");
        //            prod._PreUnit = Convert.ToDecimal("0.000");
        //            prod._Cant = Convert.ToDecimal("0.000");
        //            prod._Igv = Convert.ToDecimal("0.000");
        //            prod._subTotal = Convert.ToDecimal("0.000");
        //            prod._Dscto = Convert.ToDecimal("0.000");
        //            prod._nu_pordscto = 0;
        //            prod._detalle = "";
        //            lstProd.Add(prod);
        //            //Muestra la grilla con un fila en blanco 
        //            GVDetalleProducto.DataSource = lstProd;
        //            GVDetalleProducto.DataBind();
        //            Session["lstListadoGrillafac"] = lstProd;
        //            mCalculaTotal();
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        Response.Write(ex.ToString());
        //    }
        //}


        protected void getCalculo()
        {
            decimal deSuma = 0;
            decimal deTot;
            decimal detIgv;
            decimal detDesc;
            decimal total;

            deTot = 0;
            detDesc = 0;
            detIgv = 0;
            EDTipImpuesto dti = new EDTipImpuesto();
            DropDownList igv = new DropDownList();
            dti.IdPeriodo = "2013"; // LLENAR CON SESION
            WebHelper.LoadListControl2(igv, BDeTipImpuesto.GetListFill_Qry01(dti), "mtIgv", "mtIgv");
            for (int x = 0; GVDetalleProducto.Rows.Count > x; x++)
            {
                var stIgv = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxIGV")) as CheckBox;
                TextBox txtCant = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtcantReg");
                TextBox txtPU = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPU");
                TextBox txtigv = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV");
                TextBox txtDesc = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto");
                TextBox PorcDesc = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPorDesc");
                TextBox _SubTotal = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal");

                if (stIgv.Checked)
                {
                    if (Convert.ToDecimal(PorcDesc.Text) == 0)
                    {
                        deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                        mtIgv = Convert.ToDecimal(igv.SelectedItem.Text) * Convert.ToDecimal(_SubTotal.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = "0.0000";
                    }
                    else
                    {
                        deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                        mtDesc = (Convert.ToDecimal(PorcDesc.Text) / 100) * Convert.ToDecimal(_SubTotal.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = mtDesc.ToString();
                        mtIgv = (Convert.ToDecimal(_SubTotal.Text) - mtDesc) * Convert.ToDecimal(igv.SelectedItem.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                    }

                }
                else
                {
                    deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                    ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                    ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = "0.0000";
                    mtDesc = (Convert.ToDecimal(PorcDesc.Text) / 100) * Convert.ToDecimal(_SubTotal.Text);
                    ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = mtDesc.ToString();

                }

                deTot = deTot + deSuma;
                detDesc = detDesc + Convert.ToDecimal(txtDesc.Text);
                detIgv = detIgv + Convert.ToDecimal(txtigv.Text);
                txtDescuento.Text = detDesc.ToString();
                txtIgv_.Text = detIgv.ToString();
                total = (deTot - detDesc) + detIgv;
                txtTotal_.Text = total.ToString();
            }
        }

        protected void mCalculaTotal()
        {
            decimal deSuma = 0;
            decimal deTot;
            decimal detIgv;
            decimal detDesc;
            decimal total;

            deTot = 0;
            detDesc = 0;
            detIgv = 0;
            EDTipImpuesto dti = new EDTipImpuesto();
            DropDownList igv = new DropDownList();
            dti.IdPeriodo = "2013"; // LLENAR CON SESION
            WebHelper.LoadListControl2(igv, BDeTipImpuesto.GetListFill_Qry01(dti), "mtIgv", "mtIgv");
            for (int x = 0; GVDetalleProducto.Rows.Count > x; x++)
            {
                var chk = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxSelect")) as CheckBox;                                
                var stIgv = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxIGV")) as CheckBox;
                TextBox txtCant = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtcantReg");
                TextBox txtPU = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPU");
                TextBox txtigv = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV");
                TextBox txtDesc = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto");
                TextBox PorcDesc = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPorDesc");
                TextBox _SubTotal = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal");
                if (chk.Checked)
                {
                    if (stIgv.Checked)
                    {
                        if (Convert.ToDecimal(PorcDesc.Text) == 0)
                        {
                            deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                            mtIgv = Convert.ToDecimal(igv.SelectedItem.Text) * Convert.ToDecimal(_SubTotal.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = "0.0000";
                        }
                        else
                        {
                            deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                            mtDesc = (Convert.ToDecimal(PorcDesc.Text) / 100) * Convert.ToDecimal(_SubTotal.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = mtDesc.ToString();
                            mtIgv = (Convert.ToDecimal(_SubTotal.Text) - mtDesc) * Convert.ToDecimal(igv.SelectedItem.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                        }
                    }
                    else
                    {
                        deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = "0.0000";
                        mtDesc = (Convert.ToDecimal(PorcDesc.Text) / 100) * Convert.ToDecimal(_SubTotal.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = mtDesc.ToString();

                    }

                    deTot = deTot + deSuma;
                    detDesc = detDesc + Convert.ToDecimal(txtDesc.Text);
                    detIgv = detIgv + Convert.ToDecimal(txtigv.Text);
                    txtDescuento.Text = detDesc.ToString();
                    txtIgv_.Text = detIgv.ToString();
                    total = (deTot - detDesc) + detIgv;
                    txtTotal_.Text = total.ToString();
                }

           
            }
            ////decimal devalor = (deTot + deIgvtot);
            ////txtTotal.Text = string.Format("{0:0.000}", devalor);
        }
        

        private void mObetenerDatosPrevios()
        {
            try
            {
                if (Session["htaOCFac"] != null)
                {
                    Hashtable htaDatos = new Hashtable();
                    htaDatos = (Hashtable)Session["htaOCFac"];
                    hddIdOC.Value = string.IsNullOrEmpty(htaDatos["Id_ordenco"].ToString()) ? string.Empty : htaDatos["Id_ordenco"].ToString();
                    hidVentana.Value = string.IsNullOrEmpty(htaDatos["in_ventana"].ToString()) ? string.Empty : htaDatos["in_ventana"].ToString();
                }
                else
                {
                    Session["htaOCFac"] = null;
                    Hashtable HtaDatos = new Hashtable();
                    Session["_htaOcompraNuevo"] = HtaDatos;

                    HtaDatos = (Hashtable)Session["_htaOcompraNuevo"];
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }
        }

        private void mCargarDatos()
        {
            try
            {
                if (!string.IsNullOrEmpty(hddIdOC.Value))
                {
                    EOrdenCompra oCompra = new EOrdenCompra();

                    oCompra.Id_periodo = "2013"; //llenar con sesion
                    oCompra.Id_ordenco = string.IsNullOrEmpty(hddIdOC.Value) ? string.Empty : Convert.ToString(hddIdOC.Value);
                    oCompra.idEmpresa = "001";

                    EOrdenCompra oBtieneOC = new EOrdenCompra();
                    oBtieneOC = BOrdenCompra.mObtenerOC(oCompra);
                    txtIdOC.Text = oBtieneOC.Id_ordenco.ToString().Trim();
                    ucControlFecha1.Text = oBtieneOC.Fe_ordenco.ToString().Trim();
                    dpProv.SelectedValue = oBtieneOC.Id_clipro.ToString().Trim();
                    HiddPedidoPor.Value = oBtieneOC.Id_personal.ToString().Trim();
                    lblEmitidoPor.Text = oBtieneOC.Emitidap.ToString().Trim();
                    HddIdEmitidopor.Value = oBtieneOC.Id_personal2.ToString().Trim();
                    txtObseracion.Text = oBtieneOC.Ds_observa.ToString().Trim();
                    dpModalidad.SelectedValue = oBtieneOC.Id_modcomp.ToString().Trim();
                    dpNoneda.SelectedValue = oBtieneOC.Id_vmoneda.ToString().Trim();
                  
                    txtTipCambio.Text = oBtieneOC.Mt_tc.ToString().Trim();

                    List<EDetProducto> lstoc = new List<EDetProducto>();

                    lstoc = BDetOrdenCompra.mListarOcompraFac(oCompra);

                    Session["_seslstListaDetOC"] = lstoc;

                    GVDetalleProducto.DataSource = lstoc;

                    GVDetalleProducto.DataBind();

                    for (int r = 0; GVDetalleProducto.Rows.Count > r; r++)
                    {
                        var chk = ((CheckBox)GVDetalleProducto.Rows[r].FindControl("chkBxIGV")) as CheckBox;

                        var igv = (TextBox)GVDetalleProducto.Rows[r].FindControl("txtIGV");

                        if (igv.Text == "0.0000")
                        {
                            chk.Checked = false;
                        }
                        else
                        {
                            chk.Checked = true;
                        }
                    }
                    getCalculo();

                }


            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

        protected void GVDetalleProducto_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //decimal cant = 0;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //llena la columna de la grila tipo dropdownlist con los tipos de horario.


                DropDownList cbGrillaUN = (DropDownList)e.Row.FindControl("dpUM");
                CheckBox chkIgv = (CheckBox)e.Row.FindControl("chkBxIGV");

                WebHelper.LoadListControl2(cbGrillaUN, BTablaGeneral.TablaGeneral_qry02("020"), "ds_item", "id_item");

                AddCallbackControl(cbGrillaUN);

                cbGrillaUN.Items.Insert(0, new ListItem("Seleccione", "0"));

                chkIgv.Checked = (Boolean)DataBinder.Eval(e.Row.DataItem, "_igvActivo");
                cbGrillaUN.SelectedValue = (String)DataBinder.Eval(e.Row.DataItem, "id_vunicons").ToString();


            }


            //getCalculo();
              //GetIgv();
        }

        protected void btnSalir_Click(object sender, ImageClickEventArgs e)
        {
            this.Response.Redirect("wfOrdenCompraBnd.aspx");
        }

        protected void GVDetalleProducto_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            PageBase ri = new PageBase();
            ri.EditRowIndex = Convert.ToInt32(e.CommandArgument);

            switch (e.CommandName)
            {

                case Constants2.ConstGridRowCommand.GRIDCALC:
                 //mCalculaTotal();
                    getCalculo();
                break;

                case Constants2.ConstGridRowCommand.GRIDDELETE:

                 GVDetalleProducto.DeleteRow(Convert.ToInt32(e.CommandArgument));
                 GVDetalleProducto.DataBind();
                break;

            }

        }

     
        protected void GVDetalleProducto_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                mSalvarDatosGrilla();
                int intFila = e.RowIndex;
                List<EDetProducto> lsListadoActual = (List<EDetProducto>)Session["SeslstSalvaDatosFac"];
                lsListadoActual.RemoveAt(intFila);
                Session["SeslstSalvaDatosFac"] = lsListadoActual;
                GVDetalleProducto.DataSource = lsListadoActual;
                GVDetalleProducto.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());

            }
        }

       private void verificarCell()
       {
           lblEvaluacion.Text = "";

           for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
           {

               TextBox idProducto = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto");
               TextBox cantPed = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad");
               TextBox cantRec = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidadRec");
               TextBox cantReg = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtcantReg");

               decimal cantGen = Convert.ToDecimal(cantRec.Text) + Convert.ToDecimal(cantReg.Text);

               if (Convert.ToDecimal(cantPed.Text) >= cantGen)
               {
                   //cantReg.BackColor = System.Drawing.Color.Red;
                   //cantReg.BackColor = System.Drawing.Color.Blue;
                   //cantReg.Style.Add("background-color", "Blue");
                    lblMensaje.Text = "Correcto";
               }
               else
               {
                   //cantReg.BackColor = System.Drawing.Color.Red;
                   //cantReg.Style.Add("background-color", "Red");
                   lblEvaluacion.Text = lblEvaluacion.Text + idProducto.Text  + " " + "  Cant a Ing. es mayor: " + cantGen + " ";
                   lblMensaje.Text = "Incorrecto";
               }

           }
       }

       protected void btnGrabar_Click(object sender, ImageClickEventArgs e)
       {
           getCalculo();
           verificarCell();
           if (lblMensaje.Text == "Correcto")
           {
            
               EFactura fac = new EFactura();
               EDetFactura doc = new EDetFactura();
               EDetOrdenCompra ocd = new EDetOrdenCompra();
               DropDownList idOC = new DropDownList();

               WebHelper.LoadListControl2(idOC, BFactura.Factura_qry01(), "id_Factura", "id_Factura");

               hddIdOC.Value = idOC.SelectedItem.Text;
               fac.Id_factura = hddIdOC.Value;
               fac.Id_periodo = "2013";//llenar con sesion
               fac.Id_serie = txtNumSerie.Text;
               fac.Id_ordenco = txtIdOC.Text;
               fac.Fe_factura = Convert.ToDateTime(ucControlFecha1.Text);
               fac.Id_docucom = dpTipDoc.SelectedValue;
               fac.Nu_docu = txtNumDoc.Text;
               fac.Id_clipro = dpProv.SelectedValue;
               fac.Id_personal = "0009814";// llenar con sesion
               fac.Ds_observa = txtObseracion.Text;
               fac.Id_vmoneda = dpNoneda.SelectedValue;
               fac.Mt_total = Convert.ToDecimal(txtTotal_.Text);
               fac.Mt_tc = Convert.ToDecimal(txtTipCambio.Text);
               fac.Id_modcomp = dpModalidad.SelectedValue;
               fac.Id_ucrearec = "vsoto";//LLENAR DESDE LA SESION
               fac.Id_uupdarec = "vsoto";//LLENAR DESDE LA SESION
               fac.St_factura = "0";
               fac.St_anulado = "0";
               fac.Id_empresa = "001"; //LLENAR DESDE LA SESION
               BFactura.Factura_mnt01(fac);
               for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
               {
                   //prodxUnd.Id_producto = txtidProducto.Text;
                   var LblIdproducto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text.Trim();
                   var LblIdPres = ((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpUM")).Text.Trim();
                   var LblDsProducto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text.Trim();
                   var LblNum_Correla = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtNumCorrelativo")).Text.Trim();
                   var LblPesoBruto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text.Trim();
                   var LblCantidad = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtcantReg")).Text.Trim();
                   var LblCantidadDef = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidadRec")).Text.Trim();
                   var LblCantidadreg = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtcantReg")).Text.Trim();

                   var LblPneto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text.Trim();
                   var LblPU = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text.Trim();
                   var LblprodDscto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPorDesc")).Text.Trim();
                   var LblDscto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text.Trim();
                   var LblIGV = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text.Trim();
                   var LblSubTotal = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text.Trim();
                   var LblDetalle = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDetalle")).Text.Trim();
                   var lbltot = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtcantReg")).Text.Trim() + ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidadRec")).Text.Trim();

                   //------------------------Detalle de Factura----------------------------------------------------

                   doc.Id_periodo = "2013";//llenar con sesion
                   doc.Id_factura = hddIdOC.Value;
                   doc.Nu_correla = LblNum_Correla;
                   doc.Id_serie = txtNumSerie.Text;
                   doc.Id_producto = LblIdproducto;
                   doc.Id_prodprese = LblIdPres;
                   doc.Qt_producto = Convert.ToDecimal(LblCantidad);

                   doc.Id_vmoneda = dpNoneda.SelectedValue;
                   doc.Qt_pesobruto = Convert.ToDecimal(LblPesoBruto);
                   doc.Qt_pesoneto = Convert.ToDecimal(LblPneto);
                   doc.Mt_precuni = Convert.ToDecimal(LblPU);
                   doc.Mt_igv = Convert.ToDecimal(LblIGV);
                   doc.Mt_subtotal = Convert.ToDecimal(LblSubTotal);
                   doc.Mt_dscto = Convert.ToDecimal(LblDscto);
                   doc.Id_ucrearec = "vsoto"; //llenar con sesion
                   doc.Id_uupdarec = "vsoto"; //llenar con sesion
                   doc.St_anulado = "0";
                   doc.Id_empresa = "001"; //llenar con sesion
                   doc.detalle = LblDetalle.ToUpper();

                   BDetFactura.DetFactura_mnt01(doc);

                   ocd.Id_periodo = "2013"; //llenar con sesion
                   ocd.Id_ordenco = txtIdOC.Text;
                   ocd.Nu_correla = LblNum_Correla;
                   ocd.Id_producto = LblIdproducto;
                   ocd.Qt_difcierre = Convert.ToDecimal(LblCantidadDef) + Convert.ToDecimal(LblCantidad);
                   BFactura.Factura_mnt02(ocd);
               }
               EOrdenCompra coc = new EOrdenCompra();
               coc.Id_periodo = "2013";// llenar con sesion
               coc.Id_ordenco = txtIdOC.Text;
               coc.Id_Empresa = "001"; //llenar con sesiosn
               coc.Id_uupdarec = "vsoto"; // llenar con sesion

               BFactura.CierreCompra_mnt02(coc);

               lblMensaje.Text = "Datos grabados";
           }
           else
           {
               //lblMensaje.Text = "Error";
           }

       }
    }
}